在實際開發中,開發者經常會使用到一些通用類型,NSObject類是大部分類的一個基類,使用基類作為陣列的元素類型接收不同子類的元素。其實如果陣列中的元素是不同類型,並且這些類型沒有一個共同的基類,那麼開發者可以使用AnyObject來作為引用類型的通用類型。
// 建立三個各自獨立的class
class MyClassOne {
}
class MyClassTwo {
}
class MyClassThree {
}
var clsOne = MyClassOne()
var clsTwo = MyClassTwo()
var clsThree = MyClassThree()
//
var clsArray:Array<AnyObject> = [clsOne,clsTwo,clsThree]
for obj in clsArray{
// 進行類型的匹配
if obj is MyClassOne{
print("MyClassOne")
}else if obj is MyClassTwo{
print("MyClassTwo")
}else if obj is MyClassThree{
print("MyClassThree")
}
}
需要注意的是,AnyObject是通用的引用類型,其並不能用來描述值類型,例如上面的不能存放struct、enum等類型資料,Swift中還提供了一種更加通用的類型Any,它可以用來描述任意類型。
// 建立三個各自獨立的class
class MyClassOne {
}
class MyClassTwo {
}
class MyClassThree {
}
// 進行類的實例化
var clsOne = MyClassOne()
var clsTwo = MyClassTwo()
var clsThree = MyClassThree()
// 建立一個Any元素類型的陣列
var anyArray:Array<Any> = [clsOne,clsTwo,clsThree,100,"andy",false,(1,1),{() -> () in print("Closures")}]
上面包含自定義類型實例、整數、字串、Bool、元組、閉包等等。
接下來,是類型轉換的介紹